package com.mathdroid.model.talents;

import java.util.LinkedList;

import com.mathdroid.model.Model;
import com.mathdroid.model.enums.ESpec;
import com.mathdroid.model.enums.ETalentTree;

/**
 * Utility class. Has method to return all talent tree names for a 
 * specialization.
 */
public final class Specializations {
	
	/**
	 * Hidden default constructor.
	 */
	private Specializations() { }
	
	/**
	 * Get all three talent tree names for a specialization.
	 * @param spec The specialization.
	 * @return Three talent tree names (enumerations).
	 */
	public static LinkedList<ETalentTree> getTalentTreeEnums(
			final ESpec spec) {
		LinkedList<ETalentTree> list = new LinkedList<ETalentTree>();

		switch (Model.getESpec()) {
			case VANGUARD:
				list.add(ETalentTree.ASSAULT_SPECIALIST_V);
				list.add(ETalentTree.SHIELD_SPECIALIST_V);
				list.add(ETalentTree.TACTICS_V);
				break;
			case COMMANDO:
				list.add(ETalentTree.ASSAULT_SPECIALIST_C);
				list.add(ETalentTree.COMBAT_MEDIC_C);
				list.add(ETalentTree.GUNNERY_C);
				break;
			case GUNSLINGER:
				list.add(ETalentTree.DIRTY_FIGHTING_G);
				list.add(ETalentTree.SABOTEUR_G);
				list.add(ETalentTree.SHARPSHOOTER_G);
				break;
			case SCOUNDREL:
				list.add(ETalentTree.DIRTY_FIGHTING_S);
				list.add(ETalentTree.SAWBONES_S);
				list.add(ETalentTree.SCRAPPER_S);
				break;
			case GUARDIAN:
				list.add(ETalentTree.FOCUS_G);
				list.add(ETalentTree.VIGILANCE_G);
				list.add(ETalentTree.DEFENSE_G);
				break;
			case SENTINEL:
				list.add(ETalentTree.ASSAULT_SPECIALIST_S);
				list.add(ETalentTree.COMBAT_MEDIC_S);
				list.add(ETalentTree.GUNNERY_S);
				break;
			case SAGE:
				list.add(ETalentTree.BALANCE_S);
				list.add(ETalentTree.SEER_S);
				list.add(ETalentTree.TELEKINETICS_S);
				break;
			case SHADOW:
				list.add(ETalentTree.BALANCE_SHADOW);
				list.add(ETalentTree.KINETIC_COMBAT_S);
				list.add(ETalentTree.INFILTRATION_S);
				break;
			
			case POWERTECH:
				list.add(ETalentTree.FIREBUG_P);
				list.add(ETalentTree.ADVANCED_PROTOTYPE_P);
				list.add(ETalentTree.SHIELD_TECH_P);
				break;
			case MERCENARY:
				list.add(ETalentTree.FIREBUG_M);
				list.add(ETalentTree.ARSENAL_M);
				list.add(ETalentTree.BODYGUARD_M);
				break;
			case JUGGERNAUT:
				list.add(ETalentTree.IMMORTAL_J);
				list.add(ETalentTree.VENGEANCE_J);
				list.add(ETalentTree.RAGE_J);
				break;
			case MARAUDER:
				list.add(ETalentTree.ANNIHILATION_M);
				list.add(ETalentTree.CARNAGE_M);
				list.add(ETalentTree.RAGE_M);
				break;
			case OPERATIVE:
				list.add(ETalentTree.LETHALITY_O);
				list.add(ETalentTree.MEDIC_O);
				list.add(ETalentTree.CONCEALMENT_O);
				break;
			case SNIPER:
				list.add(ETalentTree.LETHALITY_S);
				list.add(ETalentTree.ENGINEERING_S);
				list.add(ETalentTree.MARKSMAN_S);
				break;
			case SORCERER:
				list.add(ETalentTree.CORRUPTION_S);
				list.add(ETalentTree.LIGHTNING_S);
				list.add(ETalentTree.MADNESS_S);
				break;
			case ASSASSIN:
				list.add(ETalentTree.DARKNESS_A);
				list.add(ETalentTree.DECEPTION_A);
				list.add(ETalentTree.MADNESS_A);
				break;
			default:
		}
		
		return list;
	}
}
